package com.cloud.monitor.sys.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cloud.monitor.sys.config.Constant;
import com.cloud.monitor.sys.config.Symbol;
import com.cloud.monitor.sys.entity.nodelayer.NetModel;
import com.cloud.monitor.sys.mapper.NodeDataAddMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author wurj
 * @time 2020/4/23 14:46
 * @description
 */
@Service
public class DataImplementService {
    @Autowired
    DataScratchControllerService dataScratchControllerService;
    @Autowired
    NodeDataAddMapper dataAddOperation;

    public String getCurrentTime(){
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        String str = sdf.format(new Date());

        return str;
    }

    public String mapping(String ip){
        String name="";
        switch (ip){
            case Constant.WRJ:name="wrj";break;
            case Constant.xbc:name="xbc";break;
            case Constant.xbc_node:name= "xbc_node";break;
            case Constant.lzy:name= "lzy";break;
            case Constant.cyf:name= "cyf";break;
            case Constant.msp:name= "msp";break;
        }
        return name;
    }

    public void addCPUData(){
        JSONObject jsonObject=dataScratchControllerService.GetJsonService(Symbol.CPU);
        JSONObject jsondata= jsonObject.getJSONObject("data");
        JSONArray jsonresult= jsondata.getJSONArray("result");
        for (int i=0;i<jsonresult.size();i++){
            JSONObject jsoninstance=jsonresult.getJSONObject(i).getJSONObject("metric");
            JSONArray jsonValue=jsonresult.getJSONObject(i).getJSONArray("value");
            String ip=jsoninstance.get("instance").toString();
            String value=jsonValue.get(1).toString().substring(0,4);
//            System.out.println(ip);
//            System.out.println(value);
            dataAddOperation.addCPUData(mapping(ip),getCurrentTime(),value);
        }
    }

    public void addMemoryData(){
        JSONObject jsonObject=dataScratchControllerService.GetJsonService(Symbol.MEMORY);
        JSONObject jsondata= jsonObject.getJSONObject("data");
        JSONArray jsonresult= jsondata.getJSONArray("result");
        for (int i=0;i<jsonresult.size();i++){
            JSONObject jsoninstance=jsonresult.getJSONObject(i).getJSONObject("metric");
            JSONArray jsonValue=jsonresult.getJSONObject(i).getJSONArray("value");
            String ip=jsoninstance.get("instance").toString();
            String value=jsonValue.get(1).toString().substring(0,4);
//            System.out.println(ip);
//            System.out.println(value);
            dataAddOperation.addMemoryData(mapping(ip),getCurrentTime(),value);
        }
    }

    public void addDiskData(){
        JSONObject jsonObject=dataScratchControllerService.GetJsonService(Symbol.DISK);
        JSONObject jsondata= jsonObject.getJSONObject("data");
        JSONArray jsonresult= jsondata.getJSONArray("result");
        for (int i=0;i<jsonresult.size();i++){
            JSONObject jsoninstance=jsonresult.getJSONObject(i).getJSONObject("metric");
            JSONArray jsonValue=jsonresult.getJSONObject(i).getJSONArray("value");
            String ip=jsoninstance.get("instance").toString();
            String value=jsonValue.get(1).toString().substring(0,4);
//            System.out.println(ip);
//            System.out.println(value);
            dataAddOperation.addDiskData(mapping(ip),getCurrentTime(),value);
        }
    }

    public void addNetWorkData(List<NetModel> rec, List<NetModel> trans){
       for (int i=0;i<rec.size();i++){
           String in=rec.get(i).getName();
           String invalue=rec.get(i).getValue();
           for (int j=0;j<trans.size();j++){
               String out=trans.get(j).getName();
               String outvalue=trans.get(j).getValue();
               if (in.equals(out)){
                   dataAddOperation.addNetWorkData(in,getCurrentTime(),invalue,outvalue);
               }
           }
       }
    }

    public void addIOPSData(){
        JSONObject jsonObject=dataScratchControllerService.GetJsonService(Symbol.IOPS);
        JSONObject jsondata= jsonObject.getJSONObject("data");
        JSONArray jsonresult= jsondata.getJSONArray("result");
        for (int i=0;i<jsonresult.size();i++){
            JSONObject jsoninstance=jsonresult.getJSONObject(i).getJSONObject("metric");
            JSONArray jsonValue=jsonresult.getJSONObject(i).getJSONArray("value");
            String ip=jsoninstance.get("instance").toString();
            String value=jsonValue.get(1).toString().substring(0);
            System.out.println("value = "+value);
//            System.out.println(ip);
//            System.out.println(value);
            dataAddOperation.addIOPSData(mapping(ip),getCurrentTime(),value);
        }
    }

    public List<NetModel> recData(){
        List<NetModel> models=new ArrayList<>();
        JSONObject jsonObject=dataScratchControllerService.GetJsonService(Symbol.NETWORKREC);
        JSONObject jsondata= jsonObject.getJSONObject("data");
        JSONArray jsonresult= jsondata.getJSONArray("result");
        for (int i=0;i<jsonresult.size();i++){
            JSONObject jsoninstance=jsonresult.getJSONObject(i).getJSONObject("metric");
            JSONArray jsonValue=jsonresult.getJSONObject(i).getJSONArray("value");
            String ip=jsoninstance.get("instance").toString();
            String value=jsonValue.get(1).toString().substring(0,4);
//            System.out.println(ip);
//            System.out.println(value);
            models.add(new NetModel(mapping(ip),value));
        }
        return models;
    }

    public List<NetModel> transData(){
        List<NetModel> models=new ArrayList<>();
        JSONObject jsonObject=dataScratchControllerService.GetJsonService(Symbol.NETWORKTRANS);
        JSONObject jsondata= jsonObject.getJSONObject("data");
        JSONArray jsonresult= jsondata.getJSONArray("result");
        for (int i=0;i<jsonresult.size();i++){
            JSONObject jsoninstance=jsonresult.getJSONObject(i).getJSONObject("metric");
            JSONArray jsonValue=jsonresult.getJSONObject(i).getJSONArray("value");
            String ip=jsoninstance.get("instance").toString();
            String value=jsonValue.get(1).toString().substring(0,4);
//            System.out.println(ip);
//            System.out.println(value);
            models.add(new NetModel(mapping(ip),value));
        }
        return models;
    }

}
